import { isObject, isDate, encode } from './util'

/**
 * 根据params构造url
 *
 * @export
 * @param {string} url 原始url
 * @param {*} [params] 请求参数
 * @returns {string} 改造后的url
 */
export function buildURL(url: string, params?: any): string {
  // prams 为空，直接返回url
  if (!params) {
    return url
  }
  let parts: string[] = []
  Object.keys(params).forEach(function(key) {
    const val = params[key]
    // 如果参数是数组，则转换为key[]=value1&key[]=value2
    let pramsArray: string[] = []
    if (Array.isArray(val)) {
      key += '[]'
      pramsArray = val
    } else {
      pramsArray.push(val)
    }
    pramsArray.forEach(val => {
      if (isDate(val)) {
        val = val.toISOString()
      } else if (isObject(val)) {
        val = JSON.stringify(val)
      }
      parts.push(`${encode(key)}=${encode(val)}`)
    })
  })
  let serializedParams = parts.join('&')

  if (serializedParams) {
    // 去除url中的#hash
    const markIndex = url.indexOf('#')
    if (markIndex !== -1) {
      url = url.slice(0, markIndex)
    }

    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams
  }

  return url
}
